package org.grayrabbit.cms.publish.api;

import java.io.ByteArrayOutputStream;
import java.util.List;

import org.grayrabbit.cms.entity.Admin;
import org.grayrabbit.cms.entity.Site;

public interface Publishable {
	
	/**首页*/
	public final static String INDEXT_GEN = "index";	
	/**站点*/
	public final static String SITE_GEN = "site";
	/**栏目*/
	public final static String CATEGORY_GEN = "cat";
	/**栏目列表*/
	public final static String CATEGORY_LIST_GEN = "catlist";
	/**文章，内容*/
	public final static String CONTENT_GEN = "content";
	/**专题*/
	public final static String TOPIC_GEN = "topic";
	/**专题列表*/
	public final static String TOPIC_LIST_GEN = "topiclist";
	/**调查*/
	public final static String SURVEY_GEN = "survey";
	
	public final static String CONTENT_GEN_ASY = "contentasynchronous";
	public final static String CATEGORY_GEN_ASY = "categoryasynchronous";
	public final static String PERCENT = "percent";
	/**
	 * 进度百分比标识
	 */
	public static boolean PERCENT_FLAG = true;
	/**全量发布*/
	public final static String ALL_PUBLISH = "1";
	/**增量发布*/
	public final static String MORE_PUBLISH = "2";
	/**首页发布*/
	public final static String INDEX_PUBLISH = "3";
	/**列表页发布*/
	public final static String LIST_PUBLISH = "4";
	/**首页与列表页发布*/
	public final static String LIST_AND_INDEX_PUBLISH = "0";
	/**
	 * 静态化发布接口
	 * @param site 	当前站点,一般是session中所存储的site值
	 * @param genType 		静态生成类型,取值范围:['site':'站点'，'cat':'栏目'、'topic':'专题'、'survey':调查、'content':'文章','associator':'个协']
	 * @param genMode		静态生成模式,取值范围[1:全量发布;2，增量发布;3,只发布首页;4,只发布列表页;5，发布首页与列表页]
	 * @param targetIds			静态生成的目标对应id集合
	 * @param currentAdmin	当前操作用户
	 * @param clientIp				客户端IP地址
	 * @param isAuto 				是否是自动发布
	 * @param pageSize 			文章列表页面每页行数
	 * @param pageNum			文章列表生成页码数
	 * @return string 
	 */
	public String publish(Site site,String genType,String genMode,List<String> targetIds,Admin currentAdmin,String clientIp,Boolean isAuto,Integer pageSize,Integer pageNum);
	
	/**
	 * 获取当前发布任务的进度信息
	 * @param publishKey 发布任务KEY，由:发布类型_生成模式_对象ID【_对象ID】...
	 * 	<br>发布类型取值范围：['site':'站点'，'cat':'栏目'、'topic':'专题'、'survey':调查、'content':'文章','associator':'个协']
	 * <br>静态生成模式,取值范围[1:全量发布;2，增量发布;3,只发布首页;4,只发布列表页;5，发布首页与列表页]
	 * @param offset 	当前任务的日志偏移量，即第几条开始的记录；
	 * @return PublishInfo 当前发布任务的进度信息;
	 */
	public PublishInfo read(String publishKey,Integer offset);
	
	public void stop(String publishKey);
	
	public ByteArrayOutputStream preview(Site site,String genType,List<String> targetIds,Admin currentAdmin, String clientIp) throws Exception;
}
